const input_baseUrlInput = document.querySelector('input[name="base_url"]');
const input_apiKeyInput = document.querySelector('input[name="api_key"]');
const input_region = document.querySelector('input[name="region"]');
const input_api_key = document.querySelector('input[name="tts_api_key"]');
const input_voice_name = document.querySelector('input[name="voice_name"]');


const initial_prompt = document.querySelector('textarea[name="initial_prompt"]');
const start_prompt = document.querySelector('input[name="start_prompt"]');


var mdata = {"PromptSwitch": false}
// 添加一个开关 "自定义"  另一个模式为 阴历

// Toastr 全局配置  上班前 7:25
toastr.options = {
    "closeButton": true,
    "positionClass": "toast-top-right",
    "timeOut": 3000
}
var textareas = document.querySelectorAll('#textarea-container textarea');
var prompts = Array.from(textareas).map(textarea => textarea.value);


function get_config(bl = true) {


    fetch('/config')
        .then(response => response.json())
        .then(re => {
            // 将返回的数据赋值给 mdata
            mdata = re.data;
            if (bl == false) {
                // 初始化页面
                mdata["prompts"] = []
                mdata["cnlunar_str"] = []
                mdata["start_prompt"] = []
                mdata["days"] = 0

            }

            init_view(mdata)

        })
        .catch(error => {
                toastr.error('初始化数据失败: ' + error.message);
                console.error('初始化数据失败:', error);
            }
        );

}


function init_view(mdata) {
    // 访问 /data 接口

    // 将数据分别赋值给对应的输入框和文本区域
    // console.log("mdata......0", mdata)

    input_baseUrlInput.value = mdata.db_base_url;
    input_apiKeyInput.value = mdata.db_api_key;
    input_region.value = mdata.azure_region;
    input_api_key.value = mdata.azure_ttsapi_key;

    input_voice_name.value = mdata.azure_voice_name;
    // 这里假设 initial_prompt 对应的数据在 mdata 中的某个字段，你可以根据实际情况修改
    initial_prompt.value = mdata.init_prompt;
    start_prompt.value = mdata.start_prompt;
    console.log("mdata......2")


    //创建文本框 第一个

}

// 页面加载完成后执行
window.onload = function () {
    // 获取当前日期
    const today = new Date();


    // 格式化日期为 YYYY-MM-DD 格式
    const formatDate = (date) => {
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        return `${year}-${month}-${day}`;
    };

    // 设置开始日期和结束日期的默认值
    // 初始化文本框
    get_config()
    addTextareas(0)
};


function prompt_list() {
    textareas = document.querySelectorAll('#textarea-container textarea');
    prompts = Array.from(textareas).map(textarea => textarea.value);
    console.log(prompts);
}


// document.getElementById('configForm').addEventListener('submit', function(e) {
//     e.preventDefault();
//
//     // 动态收集所有输入字段（包括固定和动态生成的）
//     const formData = {};
//     const elements = e.target.elements; // 获取表单所有元素
//
//     for (let element of elements) {
//         // 只处理有name属性的输入元素，排除按钮等
//         if (element.name && element.tagName.toLowerCase() !== 'button') {
//             // 处理不同类型输入
//             if (element.type === 'checkbox') {
//                 formData[element.name] = element.checked;
//             } else if (element.type === 'radio') {
//                 if (element.checked) {
//                     formData[element.name] = element.value;
//                 }
//             } else {
//                 formData[element.name] = element.value;
//             }
//         }
//     }
//
// });



function createSceneScript() {

      jsonData=  getForm("configForm")
      fetch('/getscript', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: jsonData
    });
}

function saveConfig() {
    // 显示提示列表
    prompt_list();
    // 创建一个 FormData 对象，用于收集表单中的所有数据
    const formData = new FormData(document.getElementById('configForm'));

    // 返回一个 Promise 对象
    return new Promise((resolve, reject) => {
        // 使用 fetch API 向服务器发送 POST 请求，请求路径为 /save
        fetch('/save', {
            method: 'POST',
            body: new URLSearchParams(formData)
        })
            .then(response => response.text())
            .then(data => {
                // 显示保存成功的提示信息
                toastr.success("保存成功! ");
                try {
                    // 尝试将返回的数据解析为 JSON 对象
                    const parsedData = JSON.parse(data);
                    const mdata = parsedData["Settings"];
                    console.log(" saveConfig  成功: 在前面" + mdata);
                    // 解析成功后，将解析后的数据传递给 resolve 函数
                    resolve(parsedData);
                } catch (parseError) {
                    // 解析失败时，将解析错误信息传递给 reject 函数
                    reject(parseError);
                }
            })
            .catch(error => {
                // 显示保存失败的提示信息
                toastr.error('保存失败: ' + error.message);
                // 将错误信息传递给 reject 函数
                reject(error);
            });
    });
}

// 执行处理
async function runProcess() {
    try {
        // 等待 saveConfig 方法的异步操作完成
        const result = await saveConfig();
        console.log("runProcess 执行处理  在后面");
        // 可以在这里使用 result 进行后续操作
        console.log("保存结果:", result);

        // 向后端 /run 接口发送 POST 请求
        const response = await fetch('/run', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(result)
        });

        // 解析响应数据
        const responseData = await response.json();
        console.log('后端 /run 接口返回的数据:', responseData);
    } catch (error) {
        // 捕获 saveConfig 方法中抛出的错误
        console.error("保存配置时出错:", error);
    }
}

// 获取根据当前时间 的 prompts 列表
function init_prompts(prompts) {
    promptIs = mdata.PromptSwitch
    const container = document.getElementById('textarea-container');
    // 清空之前添加的文本框
    container.innerHTML = '';
    days = prompts.length
    // console.log(days);
    // console.log("天数");
    // 循环创建并添加额外的文本框


    for (const index in prompts) {

        console.log("初始化 提示词对话框  :",);
        prompt = prompts[index]
        // 创建新的 div 元素用于包裹文本框和标签
        const div = document.createElement('fieldset');
        div.className = 'mb-3 border p-3 api-text';

        // 创建标签元素
        const label = document.createElement('label');
        label.className = 'form-label';
        label.textContent = "日期: " + prompt["day"];

        // 创建文本框元素
        const textarea = document.createElement('textarea');
        textarea.setAttribute('day', prompts["day"]);
        textarea.setAttribute('num', index);
        textarea.className = 'form-control daily_tip';
        textarea.name = `prompt_day:`;

        textarea.rows = 3;
        textarea.placeholder = `请输入提示词`
        // textarea.value = prompts[prompt]["cnlunar"]
        console.log("prompt  的  cnlunar_str:", prompt["cnlunar_str"]);


        if (promptIs) {
            textarea.value = document.querySelector('input[name="start_prompt"]').value;
        } else {
            if (prompt["cnlunar_str"] != null) {
                textarea.value = prompt["cnlunar_str"]
            }
            if (prompt ["prompt"] != null) {

                textarea.value = prompt ["prompt"]
            }
        }

        // 将标签和文本框添加到 div 中
        div.appendChild(label);
        div.appendChild(textarea);

        // 将 div 添加到容器中
        container.appendChild(div);
    }

    console.log("初始化 提示词对话框  :", mdata);

    mdata["cnlunar_str"] = prompts
}

//获取 阴历日期 提示词前
function getCnLunars(dateArr) {
    console.log("mdata     ", mdata);

    fetch('/getlunars', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({"start_prompt": start_prompt.value, "dateArr": dateArr})
    })
        .then(response => response.json())
        .then(re => {

            cnlunar_str = re["cnlunar_str"]
            console.log("获取提示词成功000: ", cnlunar_str);
            console.log("获取提示词成功111: ", cnlunar_str[0]["cnlunar_str"]);
            init_prompts(cnlunar_str)
            const textarea = document.createElement('textarea');
            textarea.readOnly = true;

        })
        .catch(error => {
            toastr.error('获取提示词失败: ' + error.message);
            console.error('获取提示词失败:', error);
        });
    return
}


//添加文本框
function addTextareas(num) {
    const startDate = new Date();
    const endDate = calcu_to_Date(startDate, num);
    if (num < 0) {
        //添加文本框方法参数为负数没有意义
        return false
    }
    dateArr = get_dates(startDate, endDate)
    getCnLunars(dateArr)


}


// 编辑按钮
function toggleEditable() {

    var sevaEditButton = document.getElementById('sevaEditButton');
    input_baseUrlInput.disabled = !input_baseUrlInput.disabled;
    input_apiKeyInput.disabled = !input_apiKeyInput.disabled;
    // tts_api_key   api_key
    input_region.disabled = !input_region.disabled;
    input_api_key.disabled = !input_api_key.disabled;
    input_voice_name.disabled = !input_voice_name.disabled;
    initial_prompt.disabled = !initial_prompt.disabled;


    console.log(sevaEditButton.textContent);
    console.log("sebnt.innerHTML..............");
    if (sevaEditButton.textContent === '编辑参数') {
        // 如果是编辑参数，将文本改为保存参数
        sevaEditButton.textContent = '保存参数';

    } else {
        // 如果是保存参数，将文本改回编辑参数
        saveConfig()
        sevaEditButton.textContent = '编辑参数';
    }

}

// 初始化参数按钮
function initEditable() {
    addTextareas(0)
    get_config(false)

    saveConfig()
}


// 设置 每个提示词 输入框内的文本
function set_daily_tip(prompts) {
    var dailyTipElements = document.querySelectorAll('textarea.form-control.daily_tip');


    for (let i = 0; i < dailyTipElements.length; i++) {
        dailyTipElements[i].value = prompts[i]

    }


}

document.addEventListener('DOMContentLoaded', function () {
    const startPromptSwitch = document.getElementById('startPromptSwitch');


    startPromptSwitch.addEventListener('change', function () {

        const dailyTipElements = document.querySelectorAll('textarea.form-control.daily_tip');


        mdata["PromptSwitch"] = this.checked


        console.log("选中模式按钮*********", mdata["PromptSwitch"]);
    });
});

//下拉列表事件
function printSelectedNumber() {
    const selectElement = document.getElementById('quantitySelect');
    num = selectElement.value - 1;
    addTextareas(num)
}